package com.vichat.common.util;
 

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

/**
 * 用于管理及方便读取基础配置的工具类。
 */
public abstract class Configure {
	private static final String PROPERTIES_PATH = "config.properties";
	private static final Log logger = LogFactory.getLog(Configure.class);

	private static ConfigureStore store;

	static {
		// disable ehcache's update check
		System.setProperty("net.sf.ehcache.skipUpdateCheck", "true");

		Properties properties = new Properties();
		store = new MapConfigureStore(properties);

		InputStream in = Configure.class.getClassLoader().getResourceAsStream(
				PROPERTIES_PATH);
		if (in == null) {
			throw new IllegalArgumentException("Can not found resource \""
					+ PROPERTIES_PATH + "\"!");
		}

		try {
			properties.load(in);
		} catch (IOException e) {
			logger.error(e, e);
		}
	}

	public void addListener(ConfigureListener listener) {
		getStore().addListener(listener);
	}

	public void removeListener(ConfigureListener listener) {
		getStore().removeListener(listener);
	}

	/**
	 * 返回内部用于存贮配置信息的对象。
	 */
	public static ConfigureStore getStore() {
		return store;
	}

	/**
	 * 以String形式返回某配置项的值。
	 * 
	 * @param key
	 *            配置项的名称
	 */
	public static String getString(String key) {
		return store.getString(key);
	}

	/**
	 * 以String形式返回某配置项的值，如果该配置项不存在则返回给定的默认值。
	 * 
	 * @param key
	 *            配置项的名称
	 * @param defaultValue
	 *            默认值
	 */
	public static String getString(String key, String defaultValue) {
		return store.getString(key, defaultValue);
	}

	/**
	 * 以boolean形式返回某配置项的值。
	 * 
	 * @param key
	 *            配置项的名称
	 */
	public static boolean getBoolean(String key) {
		return store.getBoolean(key);
	}

	/**
	 * 以boolean形式返回某配置项的值，如果该配置项不存在则返回给定的默认值。
	 * 
	 * @param key
	 *            配置项的名称
	 * @param defaultValue
	 *            默认值
	 */
	public static boolean getBoolean(String key, boolean defaultValue) {
		return store.getBoolean(key, defaultValue);
	}

	/**
	 * 以long形式返回某配置项的值。
	 * 
	 * @param key
	 *            配置项的名称
	 */
	public static long getLong(String key) {
		return store.getLong(key);
	}
    public static int getInt(String key) {
        return store.getInt(key);
    }

	/**
	 * 以long形式返回某配置项的值，如果该配置项不存在则返回给定的默认值。
	 * 
	 * @param key
	 *            配置项的名称
	 * @param defaultValue
	 *            默认值
	 */
	public static long getLong(String key, long defaultValue) {
		return store.getLong(key, defaultValue);
	}
	
	public static String getVideoDir(){
		return getString("videoDir");
	}
	
	public static String getFileTempDir(){
		return getString("fileTempDir");
	}
	
	public static String getFileDir(){
		return getString("fileDir");
	}

	public static String getAvaFileDir() {
		return getString("avaImageDir");
	}

	public static String getChannelFileDir() {
		return getString("channelImageDir");
	}

	public static String getFfmpegDir(){
		return getString("ffmpegDir");
	}

	public static String getUMUploadDir(){
		return getString("umUploadDir");
	}
	

	public static String getNewsImportImageDir(){
		return getString("newsImportImageDir");
	}
	


	public static String getMediaServerUrl(){
		return getString("mediaServer");
	}

	public static String getPhoneOS(){
		return getString("PhoneOS");
	}

	public static String get(){
		return getString("ffmpegDir");
	}
	
}
